package cloud.pangui.core.mongo.element;

import org.bson.Document;

/**
 * 元素
 * select中的每一个元素
 * 以及where条件，group条件中的值
 *
 * @Auther hepangui
 * @Date 2020/10/06 0001
*/
public abstract class Ele {


	/**
	 * 元素别名，如果是内层元素，无需设置，如果是最外层的select，且元素为函数，则必须设置
	 */
	protected String alias;

	/**
	 * 此元素的json
	 */
	protected Document doc;


	/**
	 * 起一个别名，类似于sql中的as语句
	 *
	 * @param alias
	 * @return
	 */
	public Ele as(String alias) {
		this.alias = alias;
		return this;
	}

	/**
	 * ele嵌套使用时，生成内部使用的表达式
	 *
	 * @return
	 */
	public Object toExpression() {
		return this.doc;
	}

	/**
	 * 获取别名
	 *
	 * @return
	 */
	public String getAlias() {
		return alias;
	}

	/**
	 * 此方法用于最外层表达式，对函数等表达式适用，因为是最外层，必须有别名
	 *
	 * @return
	 */
	public abstract Document build();

}
